package com.margo.project.web.mvcconfig.argumentresolver;

import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * 
 * https://www.cnblogs.com/leftthen/p/5227722.html
 * @author fangxingbang
 *
 */
public class MargoHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver{

	@Override
	public boolean supportsParameter(MethodParameter parameter) {
		return parameter.hasParameterAnnotation(ParamJsonContent.class);
	}

	@Override
	public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
			NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
		ParamJsonContent ann = parameter.getParameterAnnotation(ParamJsonContent.class);
		Class<?> cla=ann.type();
		String json=webRequest.getParameter(ann.name());
		ObjectMapper objectMapper=new ObjectMapper();
		Object object=objectMapper.readValue(json, cla);
		return object;
	}

}
